package com.uniedp.common.handle;

import com.uniedp.modules.security.dto.UserRegisterDTO;
import com.uniedp.modules.security.service.handler.UserRegisterHandler;
import com.uniedp.modules.sys.dto.SysUserDTO;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 注册事件实现类
 */
@Component
@Log4j2
public class EdpUserRegisterHandler implements UserRegisterHandler {

    /**
     * 验证码验证失败事件，（在邮箱手机号注册时触发）
     * @param userRegister 注册参数
     */
    @Override
    public void onCodeValidFail(UserRegisterDTO userRegister) {
        log.debug("验证码验证失败：{}", userRegister);
    }

    /**
     * 验证码验证成功事件，（在邮箱手机号注册时触发）
     * @param userRegister dto 注册参数
     */
    @Override
    public void onCodeValidSuccess(UserRegisterDTO userRegister) {
        log.debug("验证码验证成功：{}", userRegister);
    }

    /**
     * 在创建用户成功之前调用
     * @param userRegister 注册参数,可根据需求修改dto中的属性值
     */
    @Override
    public void onBeforeCreateUser(UserRegisterDTO userRegister) {
        // 可在此按照实际业务需求给userRegister参数赋值
        // 例如：userRegister.setRefId("1234566");
        // 通过 userRegister.getData() 可获取到用户注册时传递的扩展数据
    }

    /**
     * 在创建用户成功之后调用
     * @param user  用户信息
     * @param data  注册时附加参数
     * @param token 用户token
     * @return 是否返回登录token
     */
    @Override
    public boolean onAfterCreateUser(SysUserDTO user, Map<String, Object> data, String token) {
        // 可在此实现业务逻辑，如果不允许此用户创建可抛出异常阻止用户创建
        // 例如：throw new NewSailException("参数不能为空");
        // 如果不想注册后返回token，将返回值设置为 false
        // 例如：return false;
        return true;
    }

    /**
     * 用户创建失败事件
     * @param userRegister 用户注册信息
     * @param msg          失败信息（文本）
     */
    @Override
    public void onCreateUserFail(UserRegisterDTO userRegister, String msg) {
        log.debug("用户注册失败：{} msg:{}", userRegister, msg);
    }
}
